Skip to main content

Mit Rezepturen Werte setzen

Sie verwenden Rezepturen, um gleichzeitig die Werte für einen bestimmten Satz an Variablen (Rezepturdefinition) auf der Steuerung zu verändern oder auszulesen.

Die Grundeinstellungen zu Rezepturen, wie der Speicherort und das Speicherformat, legen Sie im Objekt Rezepturverwalter fest. Unterhalb dieses Objekts fügen Sie beliebig viele Rezepturdefinitionen ein.

Sie können die Rezepturen in Dateien speichern oder direkt von Dateien in die Steuerung schreiben.

Rezepturen können über die Programmieroberfläche von CODESYS, über Visualisierungselemente oder über das Applikationsprogramm aufgerufen werden.

Verwendung von Rezepturen auf entfernten Geräten

Wenn es sich um Datenquellenvariablen handelt und ein Datenquellenaustausch konfiguriert ist, werden Variablenwerte aus Rezepturen automatisch zu/von einer anderen Steuerung übertragen. Das Lesen/Schreiben erfolgt synchron. Das heißt, dass alle in einer Rezepturdefinition konfigurierten Variablen zum selben Zeitpunkt aktualisiert werden.

Durch einen Aufruf von g_RecipeManager.LastError nach dem Lesen/Schreiben können Sie überprüfen, ob die Übertragung funktioniert hat (g_RecipeManager.LastError = 0).

Rezepturbefehle in der CODESYS-Benutzeroberfläche aufrufen

Die Programmieroberfläche von CODESYS bietet Ihnen Befehle zum Erzeugen von Rezepturen sowie zum Lesen/Schreiben im Onlinebetrieb.

Rezepturbefehle programmatisch oder in einer Visualisierung aufrufen

Zur Laufzeit können die Rezepturdefinition und die Rezepturbefehle im Applikationsprogramm aufgerufen werden. Implementieren Sie dazu in Ihrem Code den Ablauf zum Schreiben, Lesen oder Überwachen der Rezepturdefinitionen mit den Methoden des Funktionsbausteins RecipeManCommands aus der Bibliothek RecipeManagement.

Für weitere Informationen siehe: RecipeManCommands (FB)

In der Visualisierung wird der Aufruf der Rezepturbefehlen mit der Eingabekonfiguration (Befehl ausführen) für ein Visualisierungselement implementiert. So kann ein Visualisierungsbenutzer das Ausführen von Rezepturbefehlen steuern.

Tipp

Die Rezepturverwaltung liest beim Initialisierungsvorgang die Werte der Variablen, die in der Rezepturdefinition festgelegt sind. Dieser Vorgang findet am Ende der Initialisierungsphase der Applikation statt. Zu diesem Zeitpunkt sind alle Initialwerte der Applikationsvariablen gesetzt. Dies wird durchgeführt, um fehlende Werte aus Rezepturdateien richtig initialisieren zu können.

Besondere Funktionsweise bei Gleitkommazahlen

Bei Variablen des Typs REAL oder LREAL wird unterschieden, ob der Wert exakt konvertierbar ist oder nicht.

  • Wenn es möglich ist, den Wert exakt zu konvertieren, wird in der Rezepturdatei nur der numerischer Wert gespeichert.

  • Wenn keine exakte Konvertierung möglich ist, wird in der Rezepturdatei neben dem numerischen Wert ein hexadezimal codierter String geschrieben. Dies soll bewirken, dass auch eine nicht konvertierbare Gleitkommazahl den gleichen Wert zurück liefert.

Dieses Feature kann mit dem Compiler-Define RECIPE_GENERATE_SIMPLE_STRINGREAL deaktiviert werden.

Tipp

In den Objekt-Eigenschaften der übergeordneten Applikation unter Build können Sie in der Option Compiler-Defines dieses Compiler-Define RECIPE_GENERATE_SIMPLE_STRINGREAL eintragen. Daraufhin wird kein hexadezimal codierter String gespeichert.

Für weitere Informationen siehe: Dialog: Eigenschaften: Build

Rezeptur erstellen

  1. Selektieren Sie im Gerätebaum das Objekt Applikation.

  2. Wählen Sie den Befehl Projekt → Objekt hinzufügen → Rezepturverwalter.

    Der Rezepturverwalter wird zum Gerätebaum hinzugefügt.

  3. Selektieren Sie im Gerätebaum das Objekt Rezepturverwalter.

  4. Wählen Sie den Befehl Projekt → Objekt hinzufügen → Rezepturdefinition.

    Die Rezepturdefinition wird unterhalb des Rezepturverwalters hinzugefügt.

  5. Öffnen Sie den Editor der Rezepturdefinition durch einen Doppelklick auf das Objekt.

  6. Führen Sie einen Doppelklick im Editor auf das leere Feld unterhalb Variable aus. Geben Sie den Namen einer Variablen an, für die Sie eine Rezeptur definieren wollen. Die Eingabehilfe steht dazu bereit: Schaltfläche _cds_icon_button_threedots.png.

  7. Wählen Sie den Befehl Rezepturen → Rezeptur einfügen und geben Sie einen Namen für die neue Rezeptur an.

    Im Editor erscheint eine Spalte mit dem Rezepturnamen.

  8. Geben Sie in diesem Feld den Wert der Variable für diese Rezeptur ein.

  9. Fügen Sie bei Bedarf weitere Variablen ein.

  10. Selektieren Sie einen Variablenwert der Rezeptur und führen Sie den Befehl Rezepturen → Rezeptur speichern aus. Wählen Sie einen Speicherort und einen Dateinamen aus.

    Die Rezeptur wird in dem Format, das im Rezepturverwalter definiert ist, gespeichert

Rezeptur aus einer Datei laden

Voraussetzung: In der Applikation gibt es eine Rezepturverwaltung. In einer Rezepturdefinition gibt es eine Rezeptur myRec mit Variablenwerten. Eine Rezepturdatei myRec.txt, die Einträge für diese Rezeptur enthält, liegt im Dateisystem vor.

Beispiel der Rezepturdatei:

PLC_PRG.bVar:=0
PLC_PRG.iVar:=2
PLC_PRG.dwVar:=35232
PLC_PRG.stVar:='first'
PLC_PRG.wstVar:='123443245'
  1. Öffnen Sie mit Doppelklick auf das Objekt Rezepturdefinition im Gerätebaum den Tabelleneditor für die Definition der einzelnen Rezepturen.

    Sie sehen eine Spalte myRec mit den aktuellen Werte für diese Rezeptur.

  2. Bearbeiten Sie die Datei myRec.txt in einem externen Texteditor und ersetzen die Variablenwerte durch andere, die sie in die Rezepturdefinition in CODESYS laden möchten. Speichern Sie die Datei.

  3. Klicken Sie in der Rezepturdefinition in die Spalte von myRec und wählen im Kontextmenü den Befehl Rezeptur laden.

    Ein Hinweis auf die mögliche Notwendigkeit eines Online-Changes beim nächsten Einloggen erscheint. Ein Online-Change wird nötig, falls Sie durch das Laden der Rezeptur die aktuellen Werte der Rezepturvariablen verändern.

  4. Schließen Sie den Hinweisdialog mit Ja (Fortfahren). Wählen Sie die Datei myRec.txt aus dem Datei-Explorer zum Laden aus.

    Die Rezepturwerte in der Rezepturdefinition werden entsprechend den in der Datei gelesenen Werten aktualisiert.

Tipp

Wenn Sie nur einzelne Variablen der Rezeptur mit neuen Werten überschreiben möchten, entfernen Sie vor dem Laden in der Rezepturdatei die Werte für die restlichen Variablen. Einträge ohne Wertangabe werden nicht eingelesen und somit bleiben diese Variablen auf der Steuerung und im Projekt durch die Aktualisierung unberührt.

Bei Werten vom Datentyp REAL/LREAL wird in manchen Fällen auch der Hexadezimalwert in die Rezepturdatei geschrieben. Dies ist notwendig, damit bei der Rückkonvertierung der exakt identische Wert wiederhergestellt wird. In diesem Fall ändern Sie den Dezimalwert und löschen den Hexadezimalwert.

Rezepturverwaltung auf der Steuerung, Speicherverbrauch

Wenn Sie die Option Rezepturverwaltung in der SPS deaktiviert haben, verbraucht der Rezepturverwalter und die Rezepturdefinitionen keinen Speicher auf der Steuerung.

Wenn Sie die Option aktiviert haben, so wird für den Rezepturverwalter und alle Rezepturdefinitionen Code erzeugt, der auf der Steuerung Speicher belegt. Die Größe des Speicherverbrauchs hängt hauptsächlich von der Anzahl der Rezepturen und deren Variablen sowie vom Datentyp der Variablen ab. Dabei ist ebenfalls von Bedeutung, ob die Felder der Rezepturdefinition mit Werten besetzt sind oder nicht. Der Speicherverbrauch von Rezepturen kann nicht berechnet werden - dieser muss bei Bedarf empirisch ermittelt werden. Die nachfolgende Tabelle soll hier nur ein Anhaltspunkt sein.

Tabelle 1. Speicherverbrauch für CODESYS V3 SP6 mit Steuerung CODESYS Control Win V3

Codegröße (Byte)

Datengröße (Byte)

Gesamt (Byte)

Eine Rezepturdefinition mit 100 INT-Variablen

194406

79400

267352

Eine Rezepturdefinition mit 200 INT-Variablen

238318

121284

459344

Eine Rezepturdefinition mit 300 INT-Variablen

282230

163084

543856

Eine Rezepturdefinition mit 100 BOOL-Variablen

192742

69884

343168

Eine Rezepturdefinition mit 200 BOOL-Variablen

235446

101568

436872

Eine Rezepturdefinition mit 300 BOOL-Variablen

278146

133284

510072

Eine Rezepturdefinition mit 100 Stringvariablen

203278

870084

1154000

Eine Rezepturdefinition mit 200 Stringvariablen

255570

1709784

2973296

Eine Rezepturdefinition mit 300 Stringvariablen

307886

2549484

2964112



Rezepturwerte von der Steuerung laden

Sie können Rezepturwerte, die auf dem Steuerungsgerät vorliegen, in die im Projekt vorliegenden Rezepturdefinitionen übernehmen, auch wenn diese Definitionen im Projekt mittlerweile erweitert wurden.

Voraussetzung: Die Option Rezepturverwaltung in der SPS im Rezepturverwalter ist aktiviert.

  1. Erstellen Sie im Projekt eine Rezepturdefinition RecDef1, die die Variablen PLC_PRG.ivar und PLC_PRG.bvar enthält. Fügen Sie eine Rezeptur R1 ein: Wert für PLC_PRG.ivar: 33, Wert für PLC_PRG.bvar: TRUE.

  2. Loggen Sie auf die Steuerung ein und laden Sie die Applikation.

    Die Rezepturdatei R1.RecDef1.txtrecipe wird im Standardverzeichnis der Steuerung ($PlcLogic$) abgelegt.

  3. Loggen Sie wieder aus und fügen Sie in der Rezepturdefinition im Projekt eine weitere Variable hinzu: PLC_PRG.dwvar.

  4. Editieren Sie die Rezepturdefinitionsdatei R1.RecDef1.txtrecipe auf dem Gerät und ändern Sie den Wert für PLC_PRG.ivar von 33 auf 34.

    Fügen Sie außerdem auf dem Gerät eine weitere Rezeptur R2 hinzu. Dazu kopieren Sie die Datei R1.RecDef1.txtrecipe und benennen sie um in R2.RecDef1.txtrecipe. Dann editieren Sie diese Datei und ändern die Rezepturwerte: PLC_PRG.ivar: 1, PLC_PRG.bvar: FALSE.

    Nun liegen auf dem Gerät zwei Rezepturen R1 und R2 bereit. Im Projekt gibt es nur R1 und sie enthält außerdem andere Werte als R1 auf dem Gerät..

  5. Loggen Sie mit Online-Change wieder auf die Steuerung ein.

  6. Wählen Sie den Befehl Rezepturen vom Gerät laden aus dem Kontextmenü.

    Eine Meldungsbox informiert, dass das Ausführen des Befehls beim nächsten Einloggen einen Online-Change auslösen kann, und dass die Rezepturen der aktuellen Rezepturdefinition mit den Rezepturen aus dem Laufzeitsystem überschrieben werden.

  7. Bestätigen Sie, dass Sie fortfahren wollen.

    Eine Meldungsbox informiert, dass die vom Gerät geladene Rezeptur für PLC_PRG.dwvar keinen Wert aus der Steuerung liefern kann.

  8. Bestätigen Sie, dass Sie fortfahren wollen.

    Der Wert von PLC_PRG.ivar in Rezeptur R1 in der Rezepturdefinition im Projekt ändert sich auf 34. Die Rezeptur R2 mit den Werten 1 und FALSE erscheint nun ebenfalls in der Rezepturdefinition. PLC_PRG.dwvar bleibt in der Rezepturdefinition.